import java.util.ArrayDeque;
import java.util.Deque;

public class Day11 {
    // 227、基本计算器II
    public int calculate(String s) {
        // 使用栈
        Deque<Integer> stack = new ArrayDeque<>();
        char[] ss = s.toCharArray();
        char op = '+'; // 这个我们每次在放入 栈之前呢，要先看这个数字之前的 计算符号是什么在进行放入栈中
        int i = 0,n = s.length();
        while(i < n) {
            if(ss[i] == ' ') {
                i++;
            }else if (ss[i] >= '0' && ss[i] <= '9') {
                int tmp = 0;
                while(i < n && ss[i] >= '0' && ss[i] <= '9') {
                    tmp = tmp * 10 + (ss[i] - '0');
                    i++;
                }
                if(op == '+') {
                    stack.push(tmp);
                }else if (op == '-') {
                    stack.push(-tmp);
                }else if (op == '*') {
                    stack.push(stack.pop() * tmp);
                }else {
                    stack.push(stack.pop() / tmp);
                }
            }else {
                // 遇到 算数符
                op = ss[i];
                i++;
            }
        }

        int ret = 0;
        while(!stack.isEmpty()){
            ret += stack.pop();
        }

        return ret;
    }
}
